﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <string>

using namespace std;

//class Person
//{
//public:
//	Person(const char* name = "peter")
//		: _name(name)
//	{
//		cout << "Person()" << endl;
//	}
//
//	Person(const Person& p)
//		: _name(p._name)
//	{
//			cout << "Person(const Person& p)" << endl;
//	}
//
//	Person& operator=(const Person& p)
//	{
//		cout << "Person operator=(const Person& p)" << endl;
//		if (this != &p)
//			_name = p._name;
//
//		return *this;
//	}
//
//	~Person()
//	{
//		cout << "~Person()" << endl;
//	}
//protected:
//	string _name; // 姓名
//};
//
//class Student : public Person
//{
//public:
//	// 构造函数
//	Student(int num, const char* name = "peter")
//		: _num(num)
//		,Person(name)  // 通过这种方式对父类进行初始化
//	{
//		cout << "Student(int,char*)" << endl;
//	}
//
//	// 拷贝构造
//	Student(const Student& s1)
//		:_num(s1._num)
//		, Person(s1)    // 通过子类向父类的强转化
//	{
//		cout << "Student(const Student& )" << endl;
//	}
//
//	// 赋值符号重载
//	Student& operator=(const Student& s1)
//	{
//		cout << "operator=" << endl;
//		if (this != &s1)
//		{
//			//Person::operator=(s1);
//			_num = s1._num;
//			Person(s1);
//		}	
//		return *this;
//	}
//
//	~Student()
//	{
//		cout << "~Student" << endl;
//	}
//
//protected:
//	int _num; //学号
//};
//
//void Test()
//{
//	Student a(1);
//	Student a2(20);
//	a2 = a;
//	int x = 10;
//}

//class Student;
//class Person
//{
//public:
//	friend void Display(const Person& p, const Student& s);
//protected:
//	string _name; // 姓名
//};
//
//class Student : public Person
//{
//protected:
//	int _stuNum; // 学号
//};
//
//void Display(const Person& p, const Student& s)
//{
//	cout << p._name << endl;
//	cout << s._stuNum << endl;
//}
//
//
//void main()
//{
//	Person p;
//	Student s;
//	Display(p, s);
//}

//class Person
//{
//public:
//	Person() { ++_count; }
//protected:
//	string _name; // 姓名
//public:
//	static int _count; // 统计人的个数。
//};
//
//int Person::_count = 0;
//
//class Student : public Person
//{
//protected:
//	int _stuNum; // 学号
//};
//
//class Graduate : public Student
//{
//protected:
// string _seminarCourse; // 研究科目
//};
//
//void TestPerson()
//{
//	Student s1;
//	Student s2;
//	Student s3;
//	Graduate s4;
//	cout << " Person接口 人数 :" << Person::_count << endl;
//	Student::_count = 666; // 在Student类，访问Person类中静态成员变量，并且设置该静态成员变量
//	cout << " Person接口 人数 :" << Person::_count << endl;
//	cout << " Student接口 人数 :" << Student::_count << endl;
//	cout << " Graduate接口 人数 :" << Graduate::_count << endl;
//}

class  Person
{
public:
	// 单纯的成员函数也不行，因为对象都没有你告诉咋调函数。
	static Person create_Person()
	{
		return Person();
	}

	~Person()	
	{}


	int re_age()
	{
		return _age;
	}
	static int _cout;
private:
	Person()
	{
		++_cout;
	}
    
	int _age = -1;
	char* _name;
};

int Person::_cout = 0;

class Student : public Person
{
private:
	int _score;
};


void TestPerson()
{
	// Student a;  
	Person::_cout = 0;
	cout << Person::create_Person().re_age() << endl;
	cout << "构造次数：" << Student::_cout << endl;
}

int main()
{
	TestPerson();
	return 0;
}